| r10 | ||
|---|---|---|
| r1 (새 문서) | 1 | [목차] |
| 2 | == 개요 == | |
| 3 | 시스템 엔지니어링 1차 과제 중 Linux Script 작성 실습과 관련된 문서이다. | |
| 4 | ||
| 5 | == 제 0과제 == | |
| 6 | scp 명령어 이용해 과제 수행에 필요한 파일들을 받아오는 과제이다. | |
| 7 | scp 사용법은 아래와 같다. | |
| r9 | 8 | [br] |
| r1 (새 문서) | 9 | ># scp 원격ID@원격서버IP:파일위치 받는위치 |
| 10 | >Ex) scp root@172.16.48.201:"/home/test/{test1[20250109].txt,test2.sh,test[3].log,testfile,}" /home/test_user | |
| 11 | 위 예시 명령어 확인 시 파일을 한번에 받아오기 위해 중괄호를 추가했고 파일명 중 대괄호가 포함되어 있어 쌍따옴표를 넣어줬다. | |
| 12 | ||
| 13 | == 제 1과제 == | |
| 14 | 2개의 파일 리스트를 비교해 같은 내용이 있는 라인을 출력하는 과제이다. | |
| 15 | diff 명령어를 사용해 중복된 라인을 출력 후 파일에 넣도록 스크립트 를 작성했다. | |
| r9 | 16 | [br] |
| r1 (새 문서) | 17 | > diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' >> "$OUTPUT_FILE" |
| r9 | 18 | 명령어 확인 시 스크립트 파일에서 특수기호 "^<" 사용을 위해 따옴표를 넣어줬다. |
| r1 (새 문서) | 19 | |
| r10 | 20 | ---- |
| 21 | 사용 명령어 diff, sed | |
| r1 (새 문서) | 22 | == 제 2과제 == |
| 23 | 대용량 파일을 비교해 공통으로 존재 하는것과 하지 않는 라인을 각각 다른 파일에 저장하는 과제이다. | |
| r3 | 24 | diff 명령어를 사용해 각각 다른 파일에 저장하도록 스크립트를 작성했다. |
| r9 | 25 | [br] |
| r1 (새 문서) | 26 | > diff "$FILE1" "$FILE2" | grep '^>' | sed 's/^> //' | awk '{print $1}' | grep -v 'filename' >> "$EXIST_FILE" |
| 27 | > diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' | awk -F '[,\t ]+' '{print $1}' >> "$NOT_EXIST_FILE" | |
| 28 | 위 명령어 확인 시 제 1과제 명령어와[*1 diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' >> "$OUTPUT_FILE"] 비슷하지만, | |
| 29 | awk를 추가해 필요한 정보만 걸러서 저장하도록 했다. | |
| 30 | 중복되는 컨텐츠 리스트와 중복되지 않는 리스트를 각각 저장하도록했다. | |
| r5 | 31 | |
| r1 (새 문서) | 32 | == 제 3과제 == |
| 33 | 파일에 기록된 시간을 보기 편하게 변환해 별도 파일에 저장하는 과제이다. | |
| r9 | 34 | [br] |
| r3 | 35 | > cat "$FILE1" | grep -v history | awk -F ',' '{print $1 "," strftime("%Y-%m-%d %H:%M:%S", $2)}' >> $EXIST_FILE |
| r5 | 36 | strftime 함수를 이용해 파일 내 쉼표 2번째의 있는 텍스트(날짜)를 보기편하게(yyyy-mm-dd hh-mm-ss) 변환한다. |
| r1 (새 문서) | 37 | |
| 38 | || AS-IS || TO-BE || | |
| r6 | 39 | || 1721693207 || 2024-07-09 09:16:44 || |
| r1 (새 문서) | 40 | |
| 41 | == 제 4과제 == | |
| r6 | 42 | 파일내 bitrate 값의 따라 각각 다른 파일의 저장하는 과제이다. |
| r1 (새 문서) | 43 | if문을 통해 6Mbps인 경우 4~6Mbps인 경우 그 외 데이터를 각각 저장 할 수 있도록 작성했다. |
| r6 | 44 | |
| r9 | 45 | {{{if (bitrate >= 6000000) { |
| r1 (새 문서) | 46 | print out >> "HD.txt"; |
| r3 | 47 | hd_cnt++; hd_sum += bitrate; |
| r9 | 48 | } }}}bitrate 값 마다 분리 해주는 구문이다. |
| r1 (새 문서) | 49 | 다른 값들도 구문과 같이 각각 분리해 준다. |
| 50 | ||
| 51 | {{{if (hd_cnt > 0) { | |
| 52 | res = sprintf("total : %d, bitrate avg : %.0f", hd_cnt, hd_sum / hd_cnt); | |
| 53 | print res >> "HD.txt"; | |
| r9 | 54 | } }}}파일 마지막 줄에 나눈 파일 마다의 총 파일의 개수와 평균 bitrate를 계산한 값을 출력하도록했다. |
| r7 | 55 | 다른 값들도 구문과 같이 총파일 개수와 평균 bitrate를 출력한다. |
| 56 | ||
| r4 | 57 | |
| 58 | == 제 5과제 == | |
| r1 (새 문서) | 59 | 입력한 용량 값 만큼의 컨텐츠 크기인 파일만 출력하는 과제이다. |
| r9 | 60 | [br] |
| r7 | 61 | > grep "^H" hitcount.txt |
| 62 | H로 시작하는 컨텐츠 파일만 조회 하기 위해 grep에 ^를 추가해 준다. | |
| r9 | 63 | [br] |
| r4 | 64 | > current_gb = $4/1024/1024/1024; |
| r1 (새 문서) | 65 | 리스트 파일에 있는 컨텐츠 별 용량을 구해 GB로 변환 해준다. |
| 66 | ||
| r9 | 67 | {{{if (current_gb < limit) { |
| r8 | 68 | printf "%s, %s, %s, %.2f GB, %s\n", $1, $2, $3, current_gb, $5 |
| r9 | 69 | } }}}if문을 통해 입력한 GB 값과 파일리스트의 GB변환값을 비교해 미만인 파일들을 출력해준다. |
| r1 (새 문서) | 70 | |
| r8 | 71 | == 제 6과제 == |
| r1 (새 문서) | 72 | 파일이 복사된 서버의 IP 리스트의 개수와 파일이 복사된 개수를 비교해 두 값이 다른걸 출력하는 과제이다. |
| r9 | 73 | [br] |
| r2 | 74 | > split($5, ips, " "); |
| 75 | > ip_cnt = length(ips); | |
| r4 | 76 | > copy_cnt = $6; |
| 77 | split 함수를 이용해 IP 리스트 개수를 출력, | |
| 78 | 복사된 개수는 이미 Count되어 있어 값을 가져 올 수 있다. | |
| r9 | 79 | [br] |
| 80 | {{{if (ip_cnt != copy_cnt) { | |
| r2 | 81 | printf "불일치: %s (실제:%d, 기록:%d)\n", $1, ip_cnt, copy_cnt |
| r9 | 82 | } }}}if문을 통해 불일치 값을 출력해 남겨준다. |
| r2 | 83 | |
| 84 | == 제 7과제 == | |
| 85 | EventLog에서 SeesionID로 조회해 관련로그를 출력 및 관련 컨텐츠 파일을 다른 파일에서도 조회해 출력하는 과제이다. | |
| r9 | 86 | [br] |
| r1 (새 문서) | 87 | > grep "$sid" EventLog\[20241118\].log |
| 88 | SessionID를 입력받아 관련 로그를 조회한다. | |
| r9 | 89 | [br] |
| r4 | 90 | > grep "$sid" EventLog\[20241118\].log | grep ".mpg" | sed -E 's/.*[[,/ ]([^,/[ ]+\.mpg).*/\1/' | sort -u |
| 91 | mpg 파일을 다른 파일에서도 조회 하기 위해 mpg 목록들을 출력한다. | |
| 92 | ||
| r1 (새 문서) | 93 | == 제 8과제 == |
| 94 | EventLog에서 SeesionID로 조회해 관련로그를 출력 및 관련 컨텐츠 파일을 다른 파일에서도 조회해 출력하는 과제이다. | |
| r9 | 95 | [br] |
| r1 (새 문서) | 96 | > grep "$sid" EventLog\[20241118\].log |
| 97 | SessionID를 입력받아 관련 로그를 조회한다. | |
| r9 | 98 | [br] |
| r1 (새 문서) | 99 | > grep "$sid" EventLog\[20241118\].log | grep ".mpg" | sed -E 's/.*[[,/ ]([^,/[ ]+\.mpg).*/\1/' | sort -u |
| 100 | mpg 파일을 다른 파일에서도 조회 하기 위해 mpg 목록들을 출력한다. | |
| r9 | 101 | [br] |
| r2 | 102 | > start_ts=$(date -d "$LOG_DATE $start_input" +%s) |
| 103 | > Ex) inout = 10 | |
| 104 | > 변환 후 --> 10:30:00 | |
| 105 | 입력받은 시간을 변환을 하기 위한 구문이다. | |
| r9 | 106 | [br] |
| r2 | 107 | > awk -F',' -v s="$start_ts" -v e="$end_ts" '$3 >= s && $3 <= e' "$FILE" |
| 108 | 입력한 시작 시간보다 큰 값과 입력한 종료 시간보다 작거나 같은 값을 출력한다. | |
| 109 | ||
| 110 | ||
| 111 | ||
| 112 | ||
| 113 |